package com.yboot.starter.mybatis.core.validator;

import com.yboot.starter.common.core.exception.BusinessException;

/**
 * 索引校验工具
 *
 */
public interface TableIndexValidatorApi {

    /**
     * 新增数据前，校验唯一索引
     *
     * @param target 目标实例
     * @param clazz  目标类
     * @param <T>    目标类型
     */
    default <T> void validateBeforeInsert(T target, Class<T> clazz) throws BusinessException {
        validate(target, clazz, false);
    }

    /**
     * 更新数据前，校验唯一索引
     *
     * @param target 目标实例
     * @param clazz  目标类
     * @param <T>    目标类型
     * @throws RuntimeException 异常信息
     */
    default <T> void validateBeforeUpdate(T target, Class<T> clazz) throws BusinessException {
        validate(target, clazz, true);
    }

    /**
     * 保存数据前，校验唯一索引
     *
     * @param target 目标实例
     * @param clazz  目标类
     * @param update 是否是更新的状态
     * @param <T>    目标类型
     * @throws BusinessException 异常信息
     */
    <T> void validate(T target, Class<T> clazz, boolean update) throws BusinessException;


}